package v1

import "time"

type Role string

const (
	RoleAdmin     Role = "admin"
	RoleDeveloper Role = "developer"
)

type User struct {
	// 用户名，全局唯一，用于登录和识别。
	Username string `json:"username" validate:"required,alphanum,min=3,max=32"`

	// 密码的哈希值。
	// **重要**: 绝不能在数据库中存储明文密码。这里存储的是使用 bcrypt 等算法生成的哈希值。
	HashedPassword string `json:"-"` // 使用 "-" 标签确保此字段永远不会在 API 响应中序列化出去

	// 用户所属的团队。用于配额和资源隔离。
	Team string `json:"team" validate:"required"`

	// 用户拥有的角色列表。用于未来的 RBAC (基于角色的访问控制)。
	// 例如: ["admin", "team-a-developer"]
	Roles []string `json:"roles"`

	// 账户创建时间。
	CreatedAt time.Time `json:"createdAt"`
}

// Team 代表一个团队。它是配额管理和资源共享的基本单位。
type Team struct {
	// 团队名称，全局唯一。
	Name string `json:"name" validate:"required,alphanum,min=3,max=32"`

	// 团队所有者的用户名。
	Owner string `json:"owner"`

	// 团队成员的用户名列表。
	Members []string `json:"members"`

	// 我们之前定义的配额结构体，可以直接内嵌在这里，用于定义团队的资源配额。
	Quota Quota `json:"quota"`

	// 团队创建时间。
	CreatedAt time.Time `json:"createdAt"`
}

type APIToken struct {
	// 令牌的哈希值。与密码类似，我们不存储明文令牌。
	TokenHash string

	// 该令牌所属的用户名。
	Username string

	// 令牌的描述，方便用户管理。例如："Token for CI/CD pipeline"。
	Description string

	// 令牌的过期时间。
	ExpiresAt time.Time

	// 令牌的创建时间。
	CreatedAt time.Time
}
